package com.ruoyi.system.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.domain.PromptModel;
import com.ruoyi.system.domain.dto.IdsDto;
import com.ruoyi.system.domain.dto.QueryDto;
import com.ruoyi.system.service.PromptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("tool-prompt")
public class PromptController extends BaseController {
    @Autowired
    private PromptService promptService;
    @PostMapping("/add")
    public R add(@RequestBody List<PromptModel> promptModelList){
        List<PromptModel> promptModels=new ArrayList<>();
        String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        for(PromptModel promptModel:promptModelList){
            if(promptModel.getToolName().isEmpty()){
                return R.fail("工具名不能为空！");
            }
            if(promptModel.getPtName().isEmpty()){
                return R.fail("Prompt名不能为空！");
            }
            if(promptModel.getPtDesc().isEmpty()){
                return R.fail("Prompt描述不能为空！");
            }
            promptModel.setGmtCreated(time);
            promptModel.setCreator(SecurityUtils.getUserId());
            promptModel.setIsDeleted(0);
            promptModels.add(promptModel);
        }
        boolean res=promptService.saveBatch(promptModels);
        if(res) {
            logger.info("新增了:"+promptModels);
            return R.ok("新增成功！");
        }
        else {
            return R.fail("新增失败！");
        }
    }
    @PostMapping("/list")
    public R list(@RequestBody QueryDto queryDto){
        if (queryDto.getPage() == null || queryDto.getPage() == 0){
            queryDto.setPage(1L);
        }
        if (queryDto.getSize() == null || queryDto.getSize() == 0){
            queryDto.setSize(10L);
        }
        Page<PromptModel> page = new Page<>(queryDto.getPage(), queryDto.getSize());
        LambdaQueryWrapper<PromptModel> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(PromptModel::getIsDeleted,0);
        queryWrapper.like(PromptModel::getPtName,queryDto.getPtName());
        queryWrapper.like(PromptModel::getToolName,queryDto.getToolName());
        Page<PromptModel> pageResult = promptService.page(page, queryWrapper);
        logger.info("查询到Prompt："+pageResult.getRecords());
        return R.ok(pageResult);
    }
    @PostMapping("/update")
    public R update(@RequestBody List<PromptModel> promptModelList){
        List<PromptModel> promptModels=new ArrayList<>();
        String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        for(PromptModel promptModel:promptModelList){
            promptModel.setGmtModified(time);
            promptModels.add(promptModel);
        }
        boolean res=promptService.updateBatchById(promptModels);
        if(res) {
            logger.info("修改了:"+promptModels);
            return R.ok("更新成功！");
        }
        else {
            return R.fail("更新失败！");
        }
    }
    @PostMapping("/delete")
    public R delete(@RequestBody IdsDto idsDto){
        List<Long> ids = idsDto.getIds();
        if (ids == null) {
            return R.fail("必须提供Prompt ID");
        }
        List<PromptModel> promptModels=new ArrayList<>();
        String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        for (Long id : ids) {
            if (id == null) {
                return R.fail("必须提供Prompt ID");
            }
            PromptModel promptModel = new PromptModel();
            promptModel.setId(id);
            promptModel.setGmtModified(time);
            promptModel.setIsDeleted(1);
            promptModels.add(promptModel);
        }
        boolean res=promptService.updateBatchById(promptModels);
        if(res) {
            logger.debug("删除："+ids);
            return R.ok("删除成功！");
        }
        else {
            return R.fail("删除失败！");
        }
    }
}
